// constants.js - Vite / ES Module 兼容版本
// 适用于：Vue 3, React, Vanilla JS + Vite

// 编码集标识
export const SET_A = 0;
export const SET_B = 1;
export const SET_C = 2;

// 特殊控制字符（内部使用，对应 CODE128 符号值）
export const SHIFT = 98;
export const START_A = 103;
export const START_B = 104;
export const START_C = 105;
export const MODULO = 103;
export const STOP = 106;
export const FNC1 = 207;

// 根据起始码获取对应字符集
export const SET_BY_CODE = {
  [START_A]: SET_A,
  [START_B]: SET_B,
  [START_C]: SET_C,
};

// 切换字符集的指令码（如 CODE 99 = 切换到 SET_C）
export const SWAP = {
  101: SET_A,
  100: SET_B,
  99: SET_C,
};

// 起始字符（用于字符串标记，ASCII 208 = START_A + 105）
export const A_START_CHAR = String.fromCharCode(208); // 标记使用 CODE128A
export const B_START_CHAR = String.fromCharCode(209); // 标记使用 CODE128B
export const C_START_CHAR = String.fromCharCode(210); // 标记使用 CODE128C

// 字符集正则表达式片段（字符串形式，用于动态构建 RegExp）
export const A_CHARS = "[\\x00-\\x5F\\xC8-\\xCF]";   // ASCII 0-95 + FNC1-FNC4
export const B_CHARS = "[\\x20-\\x7F\\xC8-\\xCF]";   // ASCII 32-127 + FNC1-FNC4
export const C_CHARS = "(\\xCF*[0-9]{2}\\xCF*)";     // 成对数字，可含 FNC1

// CODE128 条码符号定义（107 个符号，每个是 11 位二进制字符串）
// 表示每个符号的黑白条纹模式（1=黑，0=白）
export const BARS = [
  11011001100, 11001101100, 11001100110, 10010011000, 10010001100,
  10001001100, 10011001000, 10011000100, 10001100100, 11001001000,
  11001000100, 11000100100, 10110011100, 10011011100, 10011001110,
  10111001100, 10011101100, 10011100110, 11001110010, 11001011100,
  11001001110, 11011100100, 11001110100, 11101101110, 11101001100,
  11100101100, 11100100110, 11101100100, 11100110100, 11100110010,
  11011011000, 11011000110, 11000110110, 10100011000, 10001011000,
  10001000110, 10110001000, 10001101000, 10001100010, 11010001000,
  11000101000, 11000100010, 10110111000, 10110001110, 10001101110,
  10111011000, 10111000110, 10001110110, 11101110110, 11010001110,
  11000101110, 11011101000, 11011100010, 11011101110, 11101011000,
  11101000110, 11100010110, 11101101000, 11101100010, 11100011010,
  11101111010, 11001000010, 11110001010, 10100110000, 10100001100,
  10010110000, 10010000110, 10000101100, 10000100110, 10110010000,
  10110000100, 10011010000, 10011000010, 10000110100, 10000110010,
  11000010010, 11001010000, 11110111010, 11000010100, 10001111010,
  10100111100, 10010111100, 10010011110, 10111100100, 10011110100,
  10011110010, 11110100100, 11110010100, 11110010010, 11011011110,
  11011110110, 11110110110, 10101111000, 10100011110, 10001011110,
  10111101000, 10111100010, 11110101000, 11110100010, 10111011110,
  10111101110, 11101011110, 11110101110, 11010000100, 11010010000,
  11010011100, 1100011101011
];